09. 第三方库
第三方库和包管理器
与大多数语言相比,Python 的标准库更加丰富。人们常说 Python “自带电池”,这是因为 Python 自带许多开展工作所需的库。但标准库并不具有你想要的一切,它不支持某些太专业化的任务。但好在独立开发人员编写了成千上万个第三方库。你可以浏览 PyPi 排名中最受欢迎的第三方库列表 。
既然 Python 本身不包含这些第三方库,那我们该如何获取呢?我们可以使用 pip 来安装库,这是 Python 3 自带的一个包管理器。Python 2 用户也可以使用 pip,但是 Python 2 并没有自带这个管理器,因此必须单独安装。如果你同时安装了 Python 2 和 Python 3,并且每个都带有 pip,你可以使用命令 pip2 和 pip3 来进行区分。
pip 是 Python 的标准包管理器,但不是唯一的管理器。我们还可以使用 Anaconda ,它专门为数据科学家和类似用户所设计。
使用 pip 安装包
现在让我们使用 pip 来安装 pytz 库。为了确保我们使用的是与 Python 3 自带的 pip,我们将使用命令
pip3
。pytz 是一个与时区相关的库,时区处理是
一项非常复杂的任务
。
我们可以使用
pip3
命令行安装
pytz
:
$ pip3 install pytz
上面的命令将下载并安装
pytz
,以便于我们将其导入程序。安装完成后,我们可以导入第三方库,方法与导入标准库相同。在这个示例中,我从标准库导入了
pytz
和
datetime
。标准的做法是将导入第三方库的语句,放在导入标准库的语句后面。
import datetime
import pytz
utc = pytz.utc # utc is Coordinated Universal Time
ist = pytz.timezone('Asia/Kolkata') #IST is Indian Standard Time
now = datetime.datetime.now(tz=utc) # this is the current time in UTC
ist_now = now.astimezone(ist) # this is the current time in IST.
该示例以
协调世界时(Coordinated Universal Time)
表达方式在变量
now
中存储当前时间。然后将此时间转换为
印度标准时间(Indian Standard Time)
,并将其存储在变量
ist_now
中。
有用的第三方包
掌握安装和导入第三方库的技能很有用,但要成为一名高效的程序员,还需要知道哪些库可供自己使用。人们通常会通过网上推荐或同事推荐来了解有用的新库。如果你是一位刚刚入门不久的 Python 程序员,可能还不认识太多同事,所以我们推荐你从这里开启自己的程序员生涯,下面是很受 Udacity 工程师欢迎的包列表:
- IPython - 一个优秀的交互式 Python 解释器
- requests - 提供制作 Web 请求的简单方法,用于访问 Web API。
- Flask - 用于制作 Web 应用程序和 API 的轻量级框架。
- Django - 制作 Web 应用程序的特色框架。Django 特别适用于设计复杂、内容繁重的 Web 应用程序。
- Beautiful Soup - 用于解析 HTML 并从中提取信息。尤其适用于网络抓取。
- pytest - 扩展 Python 的内置断言(assertion)和 unittest 模块。
- PyYAML - 用于阅读和编写 YAML 文件。
- NumPy - 使用 Python 进行科学计算的基础包,除了其他功能之外,其还包含强大的 N 维数组对象和有用的线性代数功能。
- pandas - 一个包含高表现力、数据结构和数据分析工具的库。更值得一提的是,pandas 提供了 DataFrame 数据结构!
- matplotlib - 一个 2D 绘图库,用于在交互式环境中生成各种硬拷贝格式的高质量图。
- ggplot - 另一个 2D 绘图库,基于 R 的 ggplot2 库。
- Pillow - Python 影像库使你的 Python 解释器新增图像处理功能。
- pyglet - 用于游戏开发的跨平台应用程序框架。
- Pygame - 用于编写游戏的 Python 模块集合。
- pytz - Python 中的世界时区定义
requirements.txt
较大的 Python 程序可能依赖几十个第三方包。为了更容易共享这些程序,程序员通常会在一个名为 requirements.txt 的文件中列出项目的依赖项。这是一个 requirements.txt 文件的示例:
beautifulsoup4==4.5.1
bs4==0.0.1
pytz==2016.7
requests==2.11.1
文件的每一行都包含一个包的名称及其版本号。版本号在技术上是可选的,但通常应该包含在内。库可能在不同版本之间略有改变(或大幅改变),因此在使用其他程序员编写好的程序时,选择相同版本的库非常重要。
大家可以使用 pip,并通过以下命令一次安装项目的所有依赖项:
$ pip3 install -r requirements.txt